'''
Created on 2012-3-28上午8:56:03

@author: nagat
@email:  yasenagat@gmail.com
'''

#列表的操作 

#列表是任意对象的序列，里面放什么都可以
names = ['Anni','Toni','Andoy','Black',1]

print(names)

#列表索引从0开始

#列表的长度
print(len(names))

#列表的第二个元素，索引是1
print(names[1])

#修改列表的某个元素非常简单，取得，然后赋值就行了
names[1] = 'JACK'
print(names)

#让我们修改一个列表中没有的看看，比如这个列表长度是5，index是0-4
#那么我们修改index=5的看看，结果如何

try:
    names[5]='Tom'
except :
    print('error -- 出错了')
    
#很好，上面的程序出错了。


#向列表的最后追加数据append

#只要998 :-)
names.append(998)

print(names)

#按照索引，向列表中插入数据
names.insert(4, '666')

print(names)

#使用切片运算符 ，可以提取一个子列表或者对子列表重新赋值，
#叫切片，你听说过木有

#提取子列表
#提取0-2，不包括2
print(names[0:2])
#效果同上
print(names[:2])
#开2开始，提取到最后
print(names[2:])

#提取并不难理解，重点来了，提取了还能赋值，这个就很给力了
#赋值前
print(names[2:4])
#赋值
names[2:4]=['小A','小B']
#赋值后
print(names)


#还有更给力的有木有，+运算符可以将两个list加到一起，神奇有木有
l1 = [1,2,3]
l2 = ['a','b','c']
l3 = l1 + l2
print(l3)
#不得不说，太神奇了


#创建空列表
l = []
l = list()
print(l)

#列表可以包含多种元素：数字，字符串，小数，其他列表,元组，字典
l = [1,'a',3.2,['dota','yy'],('ff','ii'),{'001':'aaa','002':'bbb'}]
print(l)
print(l[3][1])
print(l[5]['002'])


###高级特性和技术
list = [1,23,4,5]
#给list中的每一个数增加0.4,赋值给新列表
new_list = [l+0.4 for l in list]

#新列表
print(new_list)
#旧列表没有变,哈
print(list)

def add(n):
    return n+0.7
#更给力的有木有，每一个参数都调用新的方法，然后放入新的列表中，太犀利了
super_list = [add(l) for l in list]
print("super_list: ")
print(super_list)

#超级无敌加条件的
#取列表中大于10的
ten = [l for l in list if l > 10]
print(ten)
#列表中大于10的在加0.33
ten = [l+0.3 for l in list if l > 10]
print(ten)

def getId(n):
    if n > 10:
        return True
    else:
        return False
#给力,条件上也可以加函数，返回true，false 就可以
ten = [l+0.99 for l in list if getId(l)]
print(ten)


#取最大值
print(max(list))
#取最小值
print(min(list))
print(max(new_list))
print(min(new_list))

#超级给力遍历方法
#遍历list中放元组
list = [('jack', '男', '24'), ('tom', '男', '21'), ('like', '女', '18'), ('cat', '女', '19'), ('jetty', '女', '20')]
#貌似是name,sex,age必须对应上，print中可以只写用到的
for name,sex,age in list:
    print(name,sex,age)
    print(name)
    
    print(list[0])
    
l = ['a','b','c']
#给力遍历,(0,l[0]),(1,l[1]),(2,l[2])
for i,u in enumerate(l):
    print(i,u)

#('jack', '男', '24')，十分给力,enumerate(list)==>[(0,('jack', '男', '24')),(1,('tom', '男', '21'))]
for i,u in enumerate(list):
    print(i,u[0],u[1],u[2])
    

#zip 
li_1=['a','b','c','a']    
li_2=[2,3,4,5]

li_3 = {}
print(zip(li_1,li_2))#{'a': 7, 'c': 4, 'b': 3}
#下面就相当于循环遍历map而已
#这种循环明显非常给力
#zip => (li_1[0],li_2[0]),(li_1[1],li_2[1])
for m,n in zip(li_1,li_2):
    print(m)
    print(n)
    #判断map中有没有对象，如果没有value就返回None
    if li_3.get(m)!=None:
        li_3[m]=li_3[m]+n
    else:
        li_3[m]=n

print(li_3)



    